package com.eduagent.xwqeduagent.api.speechsynthesis.api;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 语音合成工具类
 */
public class SpeechSynthesisUtil {

    /**
     * 添加静音停顿
     * 格式：[p] (=无符号整数)，单位：毫秒
     * 
     * @param text 原文本
     * @param milliseconds 停顿时间（毫秒）
     * @return 添加了停顿标记的文本
     */
    public static String addPause(String text, int milliseconds) {
        return text + "[p" + milliseconds + "]";
    }
    
    /**
     * 在两段文本之间添加静音停顿
     * 
     * @param text1 第一段文本
     * @param text2 第二段文本
     * @param milliseconds 停顿时间（毫秒）
     * @return 合并后的文本，带有停顿标记
     */
    public static String joinWithPause(String text1, String text2, int milliseconds) {
        return text1 + "[p" + milliseconds + "]" + text2;
    }
    
    /**
     * 设置指定汉字的发音
     * 格式：[=] (=拼音/音标)
     * 声调：1-5分别表示阴平、阳平、上声、去声和轻声5个声调
     * 
     * @param text 原文本
     * @param position 汉字在文本中的位置（从0开始）
     * @param pronunciation 指定的发音，如"zhuo2"
     * @return 添加了发音标记的文本
     */
    public static String setPronunciation(String text, int position, String pronunciation) {
        if (position < 0 || position >= text.length()) {
            throw new IllegalArgumentException("位置超出文本范围");
        }
        
        StringBuilder result = new StringBuilder();
        result.append(text.substring(0, position));
        result.append(text.charAt(position));
        result.append("[=").append(pronunciation).append("]");
        result.append(text.substring(position + 1));
        
        return result.toString();
    }
    
    /**
     * 解析文本中的特殊标记（停顿和发音标记）
     * 
     * @param text 含有标记的文本
     * @return 解析后的信息
     */
    public static String parseMarkedText(String text) {
        // 查找停顿标记 [p123]
        Pattern pausePattern = Pattern.compile("\\[p(\\d+)\\]");
        Matcher pauseMatcher = pausePattern.matcher(text);
        
        StringBuilder result = new StringBuilder("解析结果：\n");
        
        while (pauseMatcher.find()) {
            int pauseDuration = Integer.parseInt(pauseMatcher.group(1));
            result.append("发现停顿标记：").append(pauseDuration).append("毫秒\n");
        }
        
        // 查找发音标记 [=zhuo2]
        Pattern pronPattern = Pattern.compile("(.)\\[=(\\w+\\d?)\\]");
        Matcher pronMatcher = pronPattern.matcher(text);
        
        while (pronMatcher.find()) {
            String character = pronMatcher.group(1);
            String pronunciation = pronMatcher.group(2);
            result.append("发现发音标记：字符'").append(character)
                  .append("'将读作'").append(pronunciation).append("'\n");
        }
        
        return result.toString();
    }
    
    /**
     * 获取支持的发音人列表
     * 
     * @return 发音人信息列表
     */
    public static String[] getVoiceList() {
        return new String[] {
            "x4_lingxiaoxuan_oral - 聆小璇（普通话女声）",
            "x4_lingyuzhao_oral - 聆玉昭（普通话女声）",
            "x4_lingfeizhe_oral - 聆飞哲（普通话男声）"
        };
    }
} 